package com.borened.common.core.security;

import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 请求限流组件,可以限制同一ip的请求频率
 * <p>
 *   <ul>
 *       <li>如果添加在方法上则该方法限制访问频率</li>
 *       <li>如果添加在类上则该类所有的方法都被限制访问频率</li>
 *   </ul>
 * 注意该注解搭配拦截器实现限流功能，底层依赖common-boot模块和redis。
 *
 * @see com.borened.common.boot.interceptor.RequestRateLimitInterceptor
 * </p>
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
@Inherited
@Documented
@Order(Ordered.HIGHEST_PRECEDENCE) //最高优先级
public @interface RequestRateLimit {
    /**
     * 允许访问的次数，默认值MAX_VALUE
     */
    int count() default Integer.MAX_VALUE;

    /**
     * 限制时间范围，默认值一分钟
     */
    long time() default 60;

    /**
     * 默认单位为秒
     */
    TimeUnit timeUnit() default TimeUnit.SECONDS;
}

